#tsp.task definiuje przestrzen przeszukiwan
#zakladamy ze jest to macierz kwadratowa
#gdzie element [i,j] to odleglosc z miasta i do miasta j
#tsp.task

readtaskfromfile<- function(x) {
	tsp.task<<- read.delim(x,FALSE)
}

#tsp.cost <- function(x)	tsp.F(x)+ tsp.G(x)



tsp.cost <- function(x) {
	N <- length(x)
	if (N==1) return(0)
	i <- matrix(c(x[1:(N-1)],x[2:N]),N-1,2)
	if (N==dim(tsp.task)[1]) 
		return(sum(tsp.task[i])+tsp.task[x[N],x[1]])
	return(sum(tsp.task[i]))
}

tsp.heuristic <- function(x) {
	N <- length(x)
	if(N==dim(tsp.task)[1]) return(0)
	return(sum(tsp.mins)-sum(tsp.mins[x])+tsp.mins[x[1]])
}

tsp.init <- function(x) {
	tsp.mins<<-colSums(apply(tsp.task,2,sort)[1:2,])/2
	#	tsp.mins <<- apply(tsp.task,2,min)
	tsp.model<<- 1:length(tsp.mins)
	ret <- list(1)
	#attr(ret[[1]],'class')<-'tsp'
	return(ret)
}

tsp.generate <-function(x) {
	unvisited <- tsp.model[-x]
	returned <- list()
	for(i in 1:length(unvisited)) {
		returned[[i]]<-c(x,unvisited[i])
	}
	return(returned)
}
